Some computing systems include persistent memory, which may be byte-addressable, high-performance, non-volatile memory. Persistent memory may provide performance comparable to traditional volatile random access memory (RAM) while also providing data persistence. However, persistent memory may present additional challenges to application developers. In particular, application developers may have to guarantee that at any given time, data in persistent memory is consistent. Otherwise, unexpected failures such as hardware failures or power failures may result in data corruption.
Traditional software development tools such as compilers and debuggers may be used to correct errors and otherwise verify the correctness of applications using persistent memory. Additionally, a hypervisor-based framework for testing applications that use persistent memory is described in Philip Lantz et al., Yat: A Validation Framework for Persistent Memory Software, USENIX Annual Technical Conference at 433 (2014).